Centos7编译内核

您所在的位置:网站首页 centos 编译内核 Centos7编译内核

Centos7编译内核

2024-03-09 07:57| 来源: 网络整理| 查看: 265

建议所有操作都在root账户下进行 查看系统版本 [root@master ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)

Centos是红帽的重新编译版本,除了没有红帽的标志性商标以及红帽收费版的软件外,其他功能与红帽几乎一致,包括这里的 redhat-release 文件,这是一个在红帽系统或者Centos系统中都有的文件,用来记录系统的版本信息,乍一看还以为是RHEL系统。

查看内核版本 [root@master ~]# hostnamectl Static hostname: master Icon name: computer-vm Chassis: vm Machine ID: 7166dcf32e654437a557a9410acd3632 Boot ID: 3366d3ff4a0f4972a42e0a6c1ac91062 Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-957.el7.x86_64 Architecture: x86-64 安装必要的编译环境 yum install gcc g++ gdb make 下载内核

所有Liunux内核版本下载地址

进入4.x内核版本的文件目录,往下翻,直到找到.tar.gz的文件,内核大小一半在120M左右。 在这里插入图片描述

复制内核下载链接地址 右键要下载的内核链接地址,选择复制链接地址,然后再切换到/usr/src/kernels目录下,因为这是内核存放的目录,所以我们直接下载到内核到该目录,接着在终端输入 wget + 复制的链接地址开始下载,下载过程比较慢。

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.1.16.tar.gz 查看cpu核心数

趁着下载的时间,我们查看一下cpu的核心数,一会编译会用到,/proc/cpuinfo 文件中存放着cpu的信息,用 cat /proc/cpuinfo | grep process 命令查看的话内容比较多,所以我们用 grep 命令将 processor筛选出来,由此可以看出我的cpu核心数为6,对于多cpu和超多核心的cpu来说这样看起来也不是很方便,通常核心数就好几页,这时候就需要用到统计命令 wc -l 了,共六行,也就是6核心。

[root@master kernels]# cat /proc/cpuinfo | grep processor processor : 0 processor : 1 processor : 2 processor : 3 processor : 4 processor : 5 [root@master kernels]# cat /proc/cpuinfo | grep process | wc -l 6 内核编译模式

要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模块(module),动态调用。如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。

配置内核

内核编译的选择很多,我只想升级内核,就不对内核进行设置了,只要保留原来内核的设置就好了,将旧内核的配置选项复制到 /usr/src/kernals/内核解压目录/.config 目录下

cp config-3.10.0-957.el7.x86_64 /usr/src/kernels/linux-4.1.16/.config

在旧内核配置的基础上配置新内核,执行这条命令后会有很多选项,只是升级不想配置内核的话可以按住回车键全部默认,直到配置结束,大概按住个几十秒就能配置完成。

make oldconfig 编译内核

确保当前目录为 /usr/src/kernels/新内核解压目录/,执行make -j6 all

在使用make命令编译源码的时候可以用-jn指定用n颗cup核心进行多核编译提高编译速度,我的核心数是6,所以用 -j6 6核心去编译,编译速度很快。

make -j6 all 安装内核

编译完成后执行 sudo make modules_install 命令

sudo make modules_install

再执行内核安装命令

make install

到这一步内核编译就全部完成了,只要重启系统,在内核选择界面就会出现新的内核选项,选择新的内核版本启动就可以使用新内核了 新内核 进入系统查看系统信息,可以看到内核已经由 3.10.0 变成了 4.1.16

[root@master ~]# uname -r 4.1.16 设置默认的内核启动项

查看可以使用的内核选项

[root@master ~]# cat /boot/grub2/grub.cfg | grep menuentry if [ x"${feature_menuentry_id}" = xy ]; then menuentry_id_option="--id" menuentry_id_option="" export menuentry_id_option menuentry 'CentOS Linux (4.1.16) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-285c095e-2eb9-4458-aded-8a70bef7c92f' { menuentry 'CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-285c095e-2eb9-4458-aded-8a70bef7c92f' { menuentry 'CentOS Linux (0-rescue-7166dcf32e654437a557a9410acd3632) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-7166dcf32e654437a557a9410acd3632-advanced-285c095e-2eb9-4458-aded-8a70bef7c92f' {

内核选项

设置 4.1.16 版本的内核作为开机默认使用内核

[root@master ~]# grub2-set-default 'CentOS Linux (4.1.16) 7 (Core)'

查看修改结果

root@master ~]# grub2-editenv list saved_entry=CentOS Linux (4.1.16) 7 (Core)

再次重启系统可以看到,默认内核选项是4.1.16版本 默认内核选项

删除不用的内核版本

查看系统中安装了哪些内核版本

[root@master ~]# rpm -qa |grep kernel kernel-tools-3.10.0-957.el7.x86_64 abrt-addon-kerneloops-2.1.11-52.el7.centos.x86_64 kernel-3.10.0-957.el7.x86_64 kernel-tools-libs-3.10.0-957.el7.x86_64 kernel-headers-3.10.0-1062.9.1.el7.x86_64

使用 yum remove 或 rpm -e 删除内核,从开机画面中可以看到,我们更新内核前所用的内核版本是 kernel-3.10.0-957.el7.x86_64,我们试着删除这个内核。

[root@master ~]# yum remove kernel-3.10.0-957.el7.x86_64 Loaded plugins: fastestmirror, langpacks Repository base is listed more than once in the configuration Resolving Dependencies --> Running transaction check ---> Package kernel.x86_64 0:3.10.0-957.el7 will be erased --> Processing Dependency: kernel >= 2.6.32 for package: lldpad-1.0.1-3.git036e314.el7.x86_64 --> Processing Dependency: kernel >= 3.10.0-862.el7 for package: kmod-kvdo-6.1.1.125-5.el7.x86_64 省略部分输出...

重新开机,3.10.0 的内核已经被删除了 删除内核 可能会出现的问题——boot分区存储空间不足 我们编译的新内核是放在boot分区中的,由于我的boot分区中没有其他内核,所以在本次编译的过程中很顺利,没有出现boot分区存储空间不足的情况,所以建议大家如果有一定的基础的话在安装Linux系统的时候不要选择默认安装,除非你只是用来学习一些简单的命令,特别是在生产环境下,一定要自己手动配置分区,然后给boot分区配置的存储空间大一点,毕竟现在的硬盘基本是白菜价,配置个1g或者八九百M的应该不会占用很多存储空间,免得到时候升级内核带来很多不必要的麻烦。

附上一篇关于内核编译的详细说明 非常好的Linux编译内核详解



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3